/**
 * PPT转换模块统一入口
 * 提供所有PPT转换功能的统一接口
 */

import { MarkdownToPptConverter } from './markdown-to-ppt.js';
import { JsonToPptConverter } from './json-to-ppt.js';
import { PptTemplateManager } from './template.js';

export * from './types.js';
export { MarkdownToPptConverter } from './markdown-to-ppt.js';
export { JsonToPptConverter } from './json-to-ppt.js';
export { PptTemplateManager } from './template.js';

/**
 * 创建Markdown转PPT转换器
 */
export function createMarkdownToPptConverter(): MarkdownToPptConverter {
  return new MarkdownToPptConverter();
}

/**
 * 创建JSON转PPT转换器
 */
export function createJsonToPptConverter(templatesDir?: string): JsonToPptConverter {
  return new JsonToPptConverter(templatesDir);
}

/**
 * 创建PPT模板管理器
 */
export function createPptTemplateManager(templatesDir?: string): PptTemplateManager {
  return new PptTemplateManager(templatesDir);
}

// 默认转换器实例（单例模式）
let defaultMarkdownConverter: MarkdownToPptConverter | null = null;
let defaultJsonConverter: JsonToPptConverter | null = null;
let defaultTemplateManager: PptTemplateManager | null = null;

/**
 * 获取默认Markdown转PPT转换器实例
 */
export function getMarkdownToPptConverter(): MarkdownToPptConverter {
  if (!defaultMarkdownConverter) {
    defaultMarkdownConverter = new MarkdownToPptConverter();
  }
  return defaultMarkdownConverter;
}

/**
 * 获取默认JSON转PPT转换器实例
 */
export function getJsonToPptConverter(): JsonToPptConverter {
  if (!defaultJsonConverter) {
    defaultJsonConverter = new JsonToPptConverter();
  }
  return defaultJsonConverter;
}

/**
 * 获取默认PPT模板管理器实例
 */
export function getPptTemplateManager(): PptTemplateManager {
  if (!defaultTemplateManager) {
    defaultTemplateManager = new PptTemplateManager();
  }
  return defaultTemplateManager;
}

/**
 * 便捷函数：Markdown转PPT
 */
export async function convertMarkdownToPpt(params: import('./types.js').MarkdownToPptParams) {
  const converter = getMarkdownToPptConverter();
  return converter.convertToPpt(params);
}

/**
 * 便捷函数：Markdown文件转PPT
 */
export async function convertMarkdownFileToPpt(params: import('./types.js').MarkdownFileToPptParams) {
  const converter = getMarkdownToPptConverter();
  return converter.convertFileToPpt(params);
}

/**
 * 便捷函数：JSON转PPT
 */
export async function convertJsonToPpt(params: import('./types.js').JsonToPptParams) {
  const converter = getJsonToPptConverter();
  return converter.convertToPpt(params);
}

/**
 * 便捷函数：基于模板生成PPT
 */
export async function generatePptFromTemplate(params: import('./types.js').GeneratePptFromTemplateParams) {
  const converter = getJsonToPptConverter();
  return converter.generateFromTemplate(params);
}
